home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / earcd / misc / emu / arosdev.lha / AROS / scripts / makefunctable.awk < prev    next >
Text File  |  1996-12-10  |  2KB  |  104 lines

  1. BEGIN {
  2.     maxlvo = 0;
  3.     stderr="/dev/stderr";
  4.  
  5.     oname=tolower(lib) "_functable.c";
  6.  
  7.     print "/*" > oname;
  8.     print "        (C) 1995-96 AROS - The Amiga Replacement OS" >> oname
  9.     print "        *** Automatic generated file. Do not edit ***" >> oname
  10.     print "        Desc: Funktion table for " lib >> oname
  11.     print "        Lang: english" >> oname
  12.     print "*/" >> oname;
  13.     print "#ifndef AROS_LIBCALL_H\n#   include <aros/libcall.h>\n#endif" >> oname;
  14.     print "#ifndef NULL\n#define NULL ((void *)0)\n#endif\n" >> oname;
  15.  
  16.     f[1] = "open";
  17.     f[2] = "close";
  18.     f[3] = "expunge";
  19.     f[4] = "null";
  20.  
  21.     if (maxlvo < 4)
  22.     maxlvo = 4;
  23. }
  24. /^[ \t]*NAME[ \t]*(\*\/)?[ \t]*$/ {
  25.     while (getline > 0)
  26.     {
  27.         if (match($0,/^[ \t]*AROS_LH/))
  28.         {
  29.         line=$0;
  30.         sub(/[ \t]*$/,"",line);
  31.         if (match(line,/[a-zA-Z0-9_]+,$/))
  32.             name=substr(line,RSTART,RLENGTH-1);
  33.         break;
  34.         }
  35.         if (match ($0, /(\*\/|\*\/)/))
  36.         break;
  37.     }
  38.     }
  39. /^(\/\*)?[ \t]*LOCATION[ \t]*(\*\/)?[ \t]*$/ {
  40.     while (getline > 0)
  41.     {
  42.     if (match ($0, /[0-9]+,/))
  43.     {
  44.         lvo=int(substr($0,RSTART,RLENGTH-1));
  45.  
  46.         if (f[lvo] != "")
  47.         printf "Error: lvo "lvo" is used by "f[lvo]" and "name >> stderr;
  48.  
  49.         f[lvo] = name;
  50.         if (lvo > maxlvo)
  51.         maxlvo = lvo;
  52.  
  53.         break;
  54.     }
  55.  
  56.     if (match ($0, /(\*\/|\*\/)/))
  57.         break;
  58.     }
  59. }
  60. /^\/\*AROS/ {
  61.     if ($2 == "alias") {
  62.     a[lvo] = $3;
  63.     f[lvo] = $4;
  64.     }
  65. }
  66. END {
  67.     for (t=1; t<=maxlvo; t++)
  68.     {
  69.     if (t in f && !(t in a))
  70.         print "void AROS_SLIB_ENTRY(" f[t] "," lib ") (void);" >> oname;
  71.     }
  72.  
  73.     print "\nvoid *const " lib "_functable[]=\n{" >> oname;
  74.  
  75.     show=0;
  76.  
  77.     for (t=1; t<=maxlvo; t++)
  78.     {
  79.     line="    ";
  80.  
  81.     if (t in f)
  82.     {
  83.         line=line "AROS_SLIB_ENTRY(" f[t] "," lib "),";
  84.  
  85.         if (t in a)
  86.         line=line " /* " a[t] " " t " */";
  87.         else
  88.         line=line " /* " t " */";
  89.     }
  90.     else
  91.         line=line "NULL, /* " t " */";
  92.  
  93.     print line >> oname;
  94.  
  95.     show=0;
  96.     }
  97.  
  98.     print "    (void *)-1L" >> oname;
  99.     print "};" >> oname;
  100.  
  101.     print "\nchar " lib "_end;" >> oname;
  102. }
  103.  
  104.